/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ejemplo.bt.usuarios.services;

import com.core.bs.BusinessException;
import com.core.pf.PersistentBroker;
import com.core.pf.PersistentException;
import com.core.pf.RetrieveCriteria;
import com.ejemplo.bt.usuarios.vo.Usuario;
import com.web.mail.Mail;
import com.web.random.Aleatorio;
import java.util.List;
import java.util.Random;
import org.hibernate.Query;

/**
 *
 * @author docenteFI
 */
public class UsuarioServices {
    
    // Eliminar
    public void eliminarUsuario(long idUsuario) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Usuario.class);
            criteria.addPkToCriteria(new Long(idUsuario));
            
            PersistentBroker broker = new PersistentBroker();
            broker.deleteObject(criteria);
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }

    
    // Obtener un usuario
    public Usuario obtenerUsuario(long idUsuario) throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Usuario.class);
            criteria.addPkToCriteria(new Long(idUsuario));
            
            PersistentBroker broker = new PersistentBroker();
            Usuario usuario = (Usuario) broker.retrieveObject(criteria);
            
            return usuario;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }
    
    
   // Obtener todos los usuarios
    public List<Usuario> obtenerUsuarios() throws BusinessException {
        try {
            RetrieveCriteria criteria = new RetrieveCriteria(Usuario.class);
            criteria.addOrder("nombre", RetrieveCriteria.ASCENDING);
            PersistentBroker broker = new PersistentBroker();
            List<Usuario> usuarios = broker.processCriteria(criteria);
            
            return usuarios;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }


    // Salvar un usuario
    public Usuario salvarUsuario(Usuario usuario) throws BusinessException {
        try {
            PersistentBroker broker = new PersistentBroker();
            if(usuario.getIdUsuario() ==0){
                Aleatorio a = new Aleatorio();
                String pin = a.cadenaAleatoria();
                usuario.setPin(pin);
                Random r = new Random();
                long id = r.nextInt();
                while(id<0){
                    id = r.nextInt();
                }
                usuario.setIdUsuario(id);
                
                broker.saveObject(usuario);
                Mail m = new Mail();
                m.enviarMail(usuario.getEmail(), usuario.getPin());
            }else{
                broker.updateObject(usuario);
            }
            return usuario;
        }
        catch(PersistentException pex) {
            throw new BusinessException(pex);
        }        
    }

    /**
     *
     * @param user
     * @param password
     * @return
     * @throws BusinessException
     * @throws RemoteException
     */
    public Usuario obtenerUsuario(String user, String password)
			throws BusinessException {
	try {
	     RetrieveCriteria criteria = new RetrieveCriteria(Usuario.class);
	     criteria.addEqualToCriteria("documento", user);
	     criteria.addEqualToCriteria("pin", password);

	     PersistentBroker broker = new PersistentBroker();
	     List usuarios = broker.processCriteria(criteria);

	     Usuario usuario = null;

	     if(usuarios.size() > 0)
	     	   usuario = (Usuario) usuarios.get(0);
	     else
	         throw new BusinessException("Login invalido\n");

	     return usuario;
        }
        catch(PersistentException pex) {
	            throw new BusinessException(pex);
        }
    }


    
}
